<?php
/*
 * Created on 2008. 9. 03.
 *
 * 작성자 : 조성훈 (akdddnet@gmail.com)
 * 
 * comment : 닷넷에서 사용한것처럼 facade패턴을 이용해서 만들려고 했으나... php에서는 그냥 요일별로 묶어서 함수를 리턴하는 방식을 사용...
 * 
 * 사용법 : 
 * 		$weather = new Weather();
 *		$aa = $weather->getTwoDayAfterTomorrow();
 *
 * 수정사항
 */

	/**
	 * 날씨 정보 class
	 */
	class Weather
	{
		private $xml;


		public function __construct($uzone='청주')
		{
			//http://www.google.com/ig/api?hl=ko&weather=%EC%B2%AD%EC%A3%BC
			$apiAddr = 'http://www.google.com/ig/api?hl=ko&weather=';
			$zone = urlencode($uzone);
			
			// 닷넷처럼 웹서비스 객체가 따로 존재하면 편할텐데;;;;
			$xml_data = file_get_contents($apiAddr.$zone);
			
			// utf-8형식으로 변환 후 xml로 load
			$xml_data = iconv('EUC-KR', 'UTF-8', $xml_data);

			$this->xml = simplexml_load_string($xml_data);
			
		}

		/**
		 * 선택하신 지역 정보를 알려줍니다. 
		 *
		 * @return array(city, date);
		 */
		public function getForecast()
		{
			$xml = $this->xml->weather->forecast_information;
			
			$artn = array(	'city'=>$xml->city['data'],
							'date'=>$xml->forecast_date['data']
			);
			
			return $artn;
		}


		/**
		 * 현재 날씨 상태를 알려줍니다. (실시간)
		 *
		 * @return array(condition, temp_f, temp_c, humidity, icon, wind_condition);
		 */
		public function getCurrent()
		{
			$xml = $this->xml->weather->current_conditions;
			
			$artn = array(	'condition'=>$xml->condition['data'],
							'temp_f'=>$xml->temp_f['data'],
							'temp_c'=>$xml->temp_c['data'],
							'humidity'=>$xml->humidity['data'],
							'icon'=>$xml->icon['data'],
							'wind_condition'=>$xml->wind_condition['data']
			);
			
			return $artn;
		}


		/**
		 * 오늘 날씨 상태를 알려줍니다. (고정)
		 *
		 * @return array(day_of_week, low, high, icon, condition);
		 */
		public function getToday()
		{
			$xml = $this->xml->weather->forecast_conditions[0];
			
			$artn = array(	'day_of_week'=>$xml->day_of_week['data'],
							'low'=>$xml->low['data'],
							'high'=>$xml->high['data'],
							'icon'=>$xml->icon['data'],
							'condition'=>$xml->condition['data']
			);
			
			return $artn;
		}
		

		/**
		 * 내일 날씨 상태를 알려줍니다. (고정)
		 *
		 * @return array(day_of_week, low, high, icon, condition);
		 */
		public function getTomorrow()
		{
			$xml = $this->xml->weather->forecast_conditions[1];
			
			$artn = array(	'day_of_week'=>$xml->day_of_week['data'],
							'low'=>$xml->low['data'],
							'high'=>$xml->high['data'],
							'icon'=>$xml->icon['data'],
							'condition'=>$xml->condition['data']
			);
			
			return $artn;
		}



		/**
		 * 모레 상태를 알려줍니다. (고정)
		 *
		 * @return array(day_of_week, low, high, icon, condition);
		 */
		public function getDayAfterTomorrow()
		{
			$xml = $this->xml->weather->forecast_conditions[2];
			
			$artn = array(	'day_of_week'=>$xml->day_of_week['data'],
							'low'=>$xml->low['data'],
							'high'=>$xml->high['data'],
							'icon'=>$xml->icon['data'],
							'condition'=>$xml->condition['data']
			);
			
			return $artn;
		}


		/**
		 * 모레 상태를 알려줍니다. (고정)
		 *
		 * @return array(day_of_week, low, high, icon, condition);
		 */
		public function getTwoDayAfterTomorrow()
		{
			$xml = $this->xml->weather->forecast_conditions[3];
			
			$artn = array(	'day_of_week'=>$xml->day_of_week['data'],
							'low'=>$xml->low['data'],
							'high'=>$xml->high['data'],
							'icon'=>$xml->icon['data'],
							'condition'=>$xml->condition['data']
			);
			
			return $artn;
		}

	}
?>